/** 
 * Copyright (C), 2010-2012, AIYOU Software Co.,Ltd. ALL RIGHTS RESERVED. 
 * File name:CommodityService.java
 * Version:1.0
 * Date:2011-12-10
 * Description: 
 * author:TT_LOVE
 */
package com.tietiao.service.commodity;

import java.util.Date;
import java.util.List;

import com.tietiao.common.util.PageModel;
import com.tietiao.dao.model.CommodityInfo;
import com.tietiao.dao.model.Lable;
import com.tietiao.dao.model.SysUser;
import com.tietiao.dao.model.UserComment;
import com.tietiao.dao.model.UserCommidityFavorite;
import com.tietiao.service.bean.CommodityBean;
import com.tietiao.service.bean.FriendBean;

public interface CommodityService {

	/**
	 * 
	 * 功能：添加商品信息
	 * 
	 * @author: TT_LOVE
	 * @Date: 2011-12-10
	 * 
	 * @param commodityBean
	 * @return 商品是否添加成功
	 */
	public int insertCommodityInfo(CommodityBean commodityBean);

	/**
	 * 
	 * 功能： 根据条件更新商品信息
	 * 
	 * @author: TT_LOVE
	 * @Date: 2011-12-10
	 * 
	 * @param commodityBean
	 * @return 商品信息是否更新成功
	 */
	public int updateCommodityInfo(CommodityBean commodityBean);

	/**
	 * 
	 * 功能：根据调价查询商品信息数
	 * 
	 * @author: TT_LOVE
	 * @Date: 2011-12-10
	 * 
	 * @param commodityBean
	 * @return 返回商品信息数
	 */
	public int getCommodityInfoByCondition(CommodityBean commodityBean);

	/**
	 * 
	 * 功能：根据条件查询商品信息【带分页】
	 * 
	 * @author: TT_LOVE
	 * @Date: 2011-12-10
	 * 
	 * @param pageSize
	 * @param pageNum
	 * @param commodityBean
	 * @return 商品信息
	 */
	public PageModel<CommodityInfo> getPageModel(int pageSize, int pageNum,
			CommodityBean commodityBean);

	/**
	 * 
	 * 功能：根据条件查询商品信息
	 * 
	 * @author: TT_LOVE
	 * @Date: 2011-12-10
	 * 
	 * @param commodityBean
	 * @return 商品信息
	 */
	public List<CommodityInfo> findCommodityInfoListByCondition(
			CommodityBean commodityBean);

	/**
	 * 
	 * 功能：根据商品编号查询商品信息
	 * 
	 * @author: TT_LOVE
	 * @Date: 2011-12-10
	 * 
	 * @param commodityId
	 *            商品ID
	 * @return 商品信息
	 */
	public CommodityInfo getCommodityInfoByCommodityId(int commodityId);

	/**
	 * 
	 * 功能：根据商品编号查询商品信息
	 * 
	 * @author: TT_LOVE
	 * @Date: 2011-12-10
	 * 
	 * @param commodityId
	 *            商品ID
	 * @param loginUserId
	 *            当前登陆ID
	 * @return 商品信息
	 */
	public CommodityInfo getCommodityInfoByCommodityId(int commodityId,
			Integer loginUserId);

	/**
	 * 
	 * 功能：分享商品信息
	 * 
	 * @author: zhijian.zhang
	 * @Date: 2011-12-14
	 * 
	 * @param commodityBean
	 * @return
	 */
	public int shareCommdityInfo(CommodityBean commodityBean);

	/**
	 * 
	 * 功能：浏览页面功能 获取商品信息
	 * 
	 * @author: zhijian.zhang
	 * @Date: 2011-12-19
	 * 
	 * @param lableName
	 *            热门标签名称:如果是多个值，则表示查询的是“其它”（排除热门标签）外的表情功能
	 * @param minTietiaoNum
	 *            最小贴条数量
	 * @param minCreateDate
	 *            最小创建时间
	 * @param loginUserId
	 *            当前登录用户ID
	 * @param start
	 *            起始记录
	 * @param limit
	 *            最大取多少条数据
	 * @param orderByClause
	 *            排序方式
	 * @return 商品信息列表
	 */
	public List<CommodityInfo> searchCommodityInfos(String lableName,
			Integer minTietiaoNum, Date minCreateDate, Integer loginUserId,
			Integer start, Integer limit, String orderByClause);

	/**
	 * 
	 * 功能：批量更新商品被贴条数
	 * 
	 * @author: zhijian.zhang
	 * @Date: 2011-12-22
	 * 
	 * @param addTietiaoNumFlag
	 *            true 被贴条数 + 1 false 被贴条数 - 1
	 * 
	 * @param commodityInfos
	 *            商品ID数组
	 * @return
	 */
	public int batchUpdateTietiaoNum(boolean addTietiaoNumFlag,
			String[] commodityIds);

	/**
	 * 功能：通过一系统参数，查询用户下面的商品信息
	 * 
	 * @author: whh
	 * @Date: 2012-1-3
	 * @param bean
	 * @return
	 */
	public PageModel<CommodityInfo> getPageModel(int pageSize, int pageNum,
			FriendBean bean);

	/**
	 * 功能：商品被收藏
	 * 
	 * @author: whh
	 * @Date: 2012-1-3
	 * 
	 * @param i
	 * @param defaultNum
	 * @param userId
	 * @param object
	 * @return
	 */
	public List<CommodityInfo> getTieTiaoCommodityInfo(int start, int limit,
			Integer userId, Integer uploaderId, Integer favoriteId,
			Integer loginUserId, String orderBy);

	/**
	 * 功能：获得所关注标签下的商品，如果为空，则返回所有商品
	 * 
	 * @author: whh
	 * @Date: 2012-1-5
	 * 
	 * @param lableName
	 * 
	 * @param loginUserId
	 *            当前登陆用户ID
	 * 
	 * @return
	 */
	public List<CommodityInfo> getMyFavoriteLableComm(int start, int limit,
			String lableName, Integer loginUserId,Integer userId, String orderBy);

	/**
	 * 
	 * 功能：商品被收藏的数量
	 * 
	 * @author: whh
	 * @Date: 2012-1-2
	 * @return
	 */
	public int getTieTiaoNum(Integer userId, Integer upLoaderId,
			Integer favoriteId);

	/**
	 * 
	 * 功能：获取商品信息列表（后台管理）
	 * 
	 * @author: zhijian.zhang
	 * @Date: 2012-1-3
	 * 
	 * @param commodityInfo
	 * @param start
	 * @param limit
	 * @param sort
	 * @param dir
	 * @return
	 */
	public PageModel<CommodityInfo> getPageModelCommodityInfosForBg(
			CommodityInfo commodityInfo, Integer start, Integer limit,
			String sort, String dir);

	/**
	 * 
	 * 功能：删除商平（ 后台管理）
	 * 
	 * @author: zhijian.zhang
	 * @Date: 2012-1-4
	 * 
	 * @param commodityIds
	 *            多个商品以逗号相隔
	 */
	public void delCommodityForBg(String commodityIds);

	/**
	 * 功能：根据商品编号获取该商品评论信息
	 * 
	 * @author: TT_LOVE
	 * @Date: 2012-1-6
	 * 
	 * @param commodityId
	 * @param orderType
	 * @return
	 */
	public List<UserComment> getCommentInfoByCommodityId(int commodityId,
			String orderType, int parentCommentId);

	/**
	 * 功能：根据标签查询商品信息
	 * 
	 * @author: TT_LOVE
	 * @Date: 2012-1-6
	 * 
	 * @param lables
	 * @param loginUserId
	 *            当前登录帐号ID
	 * @parm start 起始记录
	 * @param limit
	 *            最大取多少条数据
	 * @param orderType
	 * @return
	 */
	public List<CommodityInfo> searchCommodityInfoByLable(String lables,
			Integer loginUserId, Integer start, Integer limit, String orderType);

	/**
	 * 功能：
	 * 
	 * @author: TT_LOVE
	 * @Date: 2012-1-8
	 * 
	 * @param userId
	 * @param petName 
	 * @return
	 */
	public List<SysUser> getCommendUser(Integer userId, String petName);

	/**
	 * 功能：推荐商品
	 * 
	 * @author: TT_LOVE
	 * @Date: 2012-1-10
	 * 
	 * @param commodityId
	 * @param userIdArr
	 * @param webRoot
	 * @param loginUserId
	 */
	public void sendCommodityInfoToCommendUser(int commodityId,
			String[] userIdArr, SysUser loginUser, String webRoot);

	/**
	 * 功能：提交用户评论信息
	 * 
	 * @author: TT_LOVE
	 * @Date: 2012-1-10
	 * 
	 * @param user
	 * @param commodityId
	 * @param commentInfo
	 */
	public void submitComment(SysUser user, int commodityId, String commentInfo);

	/**
	 * 
	 * 功能：根据主题获取商品信息列表
	 * 
	 * @author: zhijian.zhang
	 * @Date: 2012-1-13
	 * 
	 * @param title
	 *            商品标题
	 * @param loginUserId
	 *            当前登陆用户ID
	 * @param start
	 * @param limit
	 * @param orderByclause
	 * @return
	 */
	public List<CommodityInfo> searchCommodityInfos(String title,
			Integer loginUserId, Integer start, Integer limit,
			String orderByclause);

	/**
	 * 功能：根据条件查询收藏夹下商品信息
	 * @author: TT_LOVE
	 * @Date: 2012-1-15
	 *
	 * @param userCommidityFavorite
	 * @param userId
	 * @param start
	 * @param limit
	 * @param orderType
	 * @return
	 */
	public List<CommodityInfo> searchCommodityInfoByFavoriteInfo(
			UserCommidityFavorite userCommidityFavorite, Integer logUserId,
			Integer start, Integer limit, String orderType);

	/**
	 * 功能：添加回复信息
	 * @author: TT_LOVE
	 * @Date: 2012-1-17
	 *
	 * @param user
	 * @param commodityId
	 * @param commentId
	 * @param contentInfo
	 */
	public void submitContentInfo(SysUser user, int commodityId,
			String commentId, String contentInfo);
	
	/**
	 * 
	 * 功能：获取当前用户上传的图片与贴条的图片书总和
	 * @author: zhijian.zhang
	 * @Date: 2012-2-12
	 *
	 * @param userId
	 * @return
	 */
	public int getMyFavComNum(int userId);

	/**
	 * 功能：根据用户ID查询商品
	 * @author: TT_LOVE
	 * @Date: 2012-2-11
	 *
	 * @param userId
	 * @param orderType
	 * @return
	 */
	public List<CommodityInfo> searchCommodityInfoByUserId(Integer userId,
			String orderType);

	/**
	 * 功能：查询标签
	 * @author: TT_LOVE
	 * @Date: 2012-2-19
	 *
	 * @return
	 */
	public List<Lable> getLableInfoList();

}
